1. 변수란?
“한개의 값을 저장할 수 있는 메모리 공간”
을 의미한다. 여러가지 형태로 값을 저장할 수 있으며 저장하기 이전에 자신이 저장할 값의 타입을 선언해야 한다.- 좀 더 쉽게 말하면 어떤 것을 저장할 수 있는 공간이다.
- 대신 형태가 존재하는데, String, int 등 정해진 형태가 있다. 이해하기 쉽게 설명하면 네모 박스에는 네모를 넣어야 하고, 동그라미 박스에는 동그라미를 넣어야 한다.
1.1 변수의 선언
변수의 선언
- int → 자료형 ( 변수가 저장될 타입 )
- num1 = 변수의 이름
- 0 = 초기화 된 변수의 값
변수를 왜 초기화 해야 할까?
- 변수를 선언하게 되면 시스템의 메모리 상에 주소 값이 할당되게 된다. 이때 해당 메모리에 어떤 값이 저장되어 있을지 모르기 때문에 초기화 해주어야 한다.
- 지역 변수의 경우 반드시 초기화를 해주어야 하지만 클래스 타입 변수와 인스턴스 타입 변수는 반드시 초기화를 해줄 필요는 없다.
변수의 선언 예시
결과
😇 변수의 이름 규정(java)
- 대 소문자는 구분된다
- 예약된 문자열은 사용할 수 없다. (print, class, true.. 등등)
- 변수의 이름은 숫자로 시작할 수 없다.
- 특수 문자는 두 개만 허용한다 → _ $
🙆🏻 변수의 이름 규정 ( JAVA 개발자들의 암묵적인 약속 )
- 클래스 이름의 첫 글자는 항상 대문자로 한다 ex) class Hello
- 여러 단어로 이루어진 이름은 단언의 첫 글자를 대문자로 한다. ex) InstanceOf
- 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 ‘_’ 로 구별한다
ex) P1, MAX_NUMBER = 30
두 변수의 값 비교하기
결과
1.2 변수의 타입
기본형
- 논리형(boolean)
- 문자형(char)
- 정수형(byte, short, int, long)
- 실수형(float, double)
실수형의 정밀도
float는 큰 값을 저장할 수 있지만 float의 정밀도는 7자리 이고, double은 15자리이다. 따라서 정확한 값을 저장하고 싶다면 double을 사용하는 것이 좋다.
참조형
- 객체의 주소(4byte)를 저장한다. 8개의 기본형을 제외한 나머지 타입이다.
1.3 상수와 리터럴
상수?
- 변수와 같지만, 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다.
- 변수를 선언하는 법과 같지만 변수의 타입 앞에 final을 붙여주기만 하면 된다.
리터럴
→ 헷갈리는 사람이 있을 것 이다. 기존에 자신이 알고 있는 상수는 1,3,4와 같은 ‘수’ 인데 JAVA에서는 상수를 다르게 정의했기 때문이다. 따라서 int a = 30; 이라는 구문에서 30은 상수가 아닌 리터럴 이라고 표기하도록 약속하였다.
상수가 필요한 이유?
- 상수를 사용하게 되면 계산식과 같은 코드에서 수식이 명확해진다(10*20 → width*height)
- 코드의 수정이 용이하다.
리터럴의 타입 (정수형)
자료형과 다른 형태의 리터럴을 넣으면 어떻게 될까?
- 리터럴의 타입은 저장된 변수의 타입과 일치하는 것이 보통이지만 범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다. (int < long)
문자열 리터럴
- 작은 따옴표( ‘ ) 로 감싼 문자를 ‘문자 리터럴’ 이라고 한다. 만약 문장을 출력하고 싶다면 큰 따옴표( ” )로 묶어 표현한다.
문자열은 변수 선언 시 빈 문자열로 초기화가 가능하지만 문자는 불가능하다.
문자열의 덧셈 규칙
- 문자열은 기본적으로 + 연산을 통해 더할 수 있으며 다른 자료형과 + 연산을 한다면 다른 자료형도 문자열 형태로 형 변환 된다.
1.4 지시자와 Printf() 함수
지시자
- 지시자?
- 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식.
지시자 | 설명 |
%b | boolean 형식으로 출력 |
%d | 10진수 (int) 형식으로 출력 |
%o | 8진수 형식으로 출력 |
%x | 16진수 형식으로 출력 |
%f | 부동 소수점(float) 형식으로 출력 |
%e | 지수 형식으로 출력 |
%c | 문자로 출력 |
%s | 문자열 형태로 출력 |
%n | 줄 바꿈(enter) |
Printf() 함수
- Println() 함수와 유사해 보이지만 그냥 변수를 출력 하는게 아닌 형식을 지정하여 출력하고자 할 때 사용하는 함수이다.
printf() 함수의 경우 지시자 지정을 해줄 때 해당 지시자와 리터럴의 타입이 맞지 않으면 에러가 발생한다.
1.5 입력(Scanner)
Scanner
스캐너 클래스를 사용하여 화면에서 값을 입력 받아 보자
2. 형변환(캐스팅)
2.1 형변환?
형 변환이란 변수의 데이터 타입을 다른 데이터 타입으로 변환하는 것을 의미합니다. 이는 데이터 타입에 대한 이해와 관련이 있으며, 변수의 값이나 정확도를 유지하거나 변경할 수 있습니다. 자바에서는 명시적 형 변환과 암시적 형 변환(자동 형변환)이 있으며, 명시적 형 변환은 큰 데이터 타입으로의 변환일 때 사용됩니다
형변환 예시
- (자료형)피연산자 형태로 작성해주면 된다
2.2 Java 변수 형 변환
형 변환 방법
자료형 간 형 변환
자료형 간 형 변환
자바에서는 크기가 작은 자료형에서 큰 자료형으로 형 변환하는 것이 자동으로 이루어집니다. 예를 들어,
byte
에서 int
로의 형 변환은 자동으로 이루어집니다. 그러나 큰 자료형에서 작은 자료형으로 형 변환하려면 명시적으로 형 변환을 해야 합니다. 이때 데이터의 손실이 발생할 수 있으므로 주의해야 합니다.예를 들어,
int
타입의 변수 num
을 byte
타입으로 형 변환하면 다음과 같이 할 수 있습니다.위 코드에서
num
변수에는 300이 할당되어 있습니다. 이를 byte
타입으로 형 변환하면 데이터의 손실이 발생합니다. byte
타입은 -128부터 127까지의 값을 표현할 수 있기 때문입니다. 따라서 위 코드에서 출력되는 값은 44가 됩니다.이처럼 자료형 간의 형 변환은 데이터의 손실이 발생할 수 있으므로, 주의해서 사용해야 합니다.
- 작은 자료형에서 큰 자료형으로 형 변환은 문제가 되지 않습니다.
- 큰 자료형에서 작은 자료형으로 변환 하는 건 프로그래머가 의도한 동작임을 명시해야 합니다.
자동 형변환 가능 도식화
byte(1byte) | short(2byte) | int(4byte) char(4byte) | long(8byte) | float(4byte) | double(8byte) |